﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSys;
using System.Data.SqlClient;

namespace DAL_MechSys
{
    public class DALEndereco : DALBase
    {

        private DTOEndereco CriarEndereco(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOEndereco dtoEndereco = new DTOEndereco();

                if (!string.IsNullOrEmpty(sqlDataReader["EnderecoID"].ToString()))
                {
                    dtoEndereco.EnderecoID = (int)sqlDataReader["EnderecoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Rua"].ToString()))
                {
                    dtoEndereco.Rua = (string)sqlDataReader["Rua"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Numero"].ToString()))
                {
                    dtoEndereco.Numero = (string)sqlDataReader["Numero"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Complemento"].ToString()))
                {
                    dtoEndereco.Complemento = (string)sqlDataReader["Complemento"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Bairro"].ToString()))
                {
                    dtoEndereco.Bairro = (string)sqlDataReader["Bairro"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Cidade"].ToString()))
                {
                    dtoEndereco.Cidade = (string)sqlDataReader["Cidade"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["UFID"].ToString()))
                {
                    dtoEndereco.Estado = (int)sqlDataReader["UFID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["CEP"].ToString()))
                {
                    dtoEndereco.CEP = (string)sqlDataReader["CEP"];
                }


                return dtoEndereco;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Inserir(DTOEndereco dtoEndereco)
        {
            try
            {
                string storedProssidere = "sp_InserirEndereco";
                SqlParameter[] parameters =
                
                {                    
                   new SqlParameter("@rua", dtoEndereco.Rua),
                   new SqlParameter("@numero", dtoEndereco.Numero),
                   new SqlParameter("@complemento", dtoEndereco.Complemento),
                   new SqlParameter("@bairro", dtoEndereco.Bairro),
                   new SqlParameter("@cidade", dtoEndereco.Cidade),                       
                   new SqlParameter("@estado", dtoEndereco.Estado),            
                   new SqlParameter("@cep", dtoEndereco.CEP)  

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }
            catch (SqlException)
            {
                throw;
            }
        }

        public DTOEndereco BuscarEnderecoPorEnderecoID(int enderecoID)
        {
            DTOEndereco dtoEndereco = null;

            try
            {
                string storedProssidere = "sp_BuscarEnderecoPorEnderecoID";
                SqlParameter[] parameters =
                        {                    
                           new SqlParameter("@enderecoID", enderecoID)                                    
                        };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {

                        dtoEndereco = CriarEndereco(sqlDataReader);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }

            return dtoEndereco;
        }

        public void Atualizar(DTOEndereco dtoEndereco)
        {
            try
            {
                string storedProssidere = "sp_AtualizarEndereco";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@enderecoID", dtoEndereco.EnderecoID),
                             new SqlParameter("@rua", dtoEndereco.Rua),
                   new SqlParameter("@numero", dtoEndereco.Numero),
                   new SqlParameter("@complemento", dtoEndereco.Complemento),
                   new SqlParameter("@bairro", dtoEndereco.Bairro),
                   new SqlParameter("@cidade", dtoEndereco.Cidade),                       
                    new SqlParameter("@estado", dtoEndereco.Estado),            
                   new SqlParameter("@cep", dtoEndereco.CEP)   
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Excluir(int enderecoID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirEndereco";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@enderecoID", enderecoID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public int BuscarUltimoEnderecoID()
        {
            try
            {
                int idCorrente = -1;

                string storedProssidere = "sp_BuscarUltimoEnderecoID";

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    if (sqlDataReader.Read())
                    {
                        idCorrente = Int32.Parse(sqlDataReader["IDCorrente"].ToString());
                    }
                }

                return idCorrente;
            }
            catch (SqlException)
            {
                throw;
            }
        }      

    }
}
